/*=============================================================================+
|                                                                              |
| Copyright 2015                                                             |
| Montage Inc. All right reserved.                                             |
|                                                                              |
+=============================================================================*/
/*! 
*   \file app_init.c
*   \brief main entry
*   \author Montage
*/

/*=============================================================================+
| Included Files                                                               |
+=============================================================================*/
#include <event.h>
#include <common.h>
#include <net_api.h>
#include <wla_api.h>
#include <alink_cfg_api.h>
#include <gpio.h>

#include <lwip/opt.h>
#include "lwip/netdb.h"
#include "platform.h"
#include <lwip/sockets.h>
#include <wla_api.h>
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "timers.h"
#include "task.h"
#include "semphr.h"
#include "cJSON/cJSON.h"
/*=============================================================================+
| Define                                                                       |
+=============================================================================*/
#define GIPO_ZCFG_RESET 6



static void alink_key_task(void* data)
{
    uint16_t n = 0;
    for(;;){
        if(digital_read(GIPO_ZCFG_RESET) == LOW)
        {
            ++n;
        //长按3秒以后设备重启
        }else if(n > (10*3))
        {
            break;
        }else{
            n = 0;
        }      
        sys_msleep(100);
    }
    platform_sys_reboot();

    vTaskDelete(NULL);
}



static void alink_key_init(void)
{
    pin_mode(GIPO_ZCFG_RESET,GPIO_IN);
    xTaskCreate(alink_key_task, (const signed char*)"key", (unsigned short) 4096, NULL, 5, NULL );
    return;
}


//第一部分配网功能

void user_init(void)
{
    //设置数据打印从uart0输出	
	platform_debug_uart_init();
    //检测本地是否已经存在保存的device_key和device_secret是否存在
	if(alink_device_init() < 0)
	{
        //如果不存在则进入串口设置模式
		alink_device_setting_proc();
		return;
	}
    //建立按键检测任务
	alink_key_init();
    //开机进行alink配网
    //此函数为阻塞函数
    //当配网失败或者成功，会退出函数
	alink_smartconfig_start();	
	platform_sys_reboot();
	return;
}
